ERROR: 3,
OUT_OF_DATE: 4,
DOWNLOADING: 5,
+ INITIALIZED: 6,
// Used as an error state for operations on unknown extensions,
// should never be in a real extensionMeta object.
const extensions = {};
// Maps uuid -> extension state object (returned from init())
const extensionStateObjs = {};
-// Maps uuid -> [GFile to the extension directory, Extension type]
-const extensionDirs = {};
// Contains the order that extensions were enabled in.
const extensionOrder = [];
function enableExtension(uuid) {
let meta = extensionMeta[uuid];
- if (!meta) {
- if (extensionDirs[uuid]) {
- let [dir, type] = extensionDirs[uuid];
- loadExtension(dir, type);
- }
+ if (!meta)
+ return;
+
+ if (meta.state == ExtensionState.INITIALIZED) {
+ loadExtension(meta.dir, meta.type, true);
return;
}
state: state });
}
-function loadExtension(dir, type) {
+function loadExtension(dir, type, enabled) {
let info;
let uuid = dir.get_basename();
extensionMeta[uuid] = meta;
meta.type = type;
+ meta.dir = dir;
meta.path = dir.get_path();
meta.error = '';
return;
}
+ if (!enabled) {
+ meta.state = ExtensionState.INITIALIZED;
+ return;
+ }
+
let extensionJs = dir.get_child('extension.js');
if (!extensionJs.query_exists(null)) {
logExtensionError(uuid, 'Missing extension.js');
let name = info.get_name();
let child = dir.get_child(name);
let enabled = enabledExtensions.indexOf(name) != -1;
- extensionDirs[name] = [dir, type];
- if (enabled)
- loadExtension(child, type);
+ loadExtension(child, type, enabled);
}
fileEnum.close(null);
}